home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Language/OS - Multiplatform Resource Library
/
LANGUAGE OS.iso
/
parallel
/
philosph
< prev
next >
Wrap
Text File
|
1992-04-11
|
2KB
|
50 lines
%---------------------------------------------------------------------
%----Dining philosophers for Linda Prolog
%----
%----Written by Geoff Sutcliffe
%---------------------------------------------------------------------
dine(Number_of_philosophers,Number_of_eats):-
First_philosopher_number is Number_of_philosophers -1,
set_table_and_philosophers(First_philosopher_number,
Number_of_philosophers,Number_of_eats).
%---------------------------------------------------------------------
%----Supply the room tickets, chopsticks and philosophers
set_table_and_philosophers(0,Number_of_philosophers,Number_of_eats):-
!,
out(chopstick(0)),
eval(try_eat(0,Number_of_philosophers,Number_of_eats),philosophers).
set_table_and_philosophers(Philosopher_number,Number_of_philosophers,
Number_of_eats):-
out(ticket),
out(chopstick(Philosopher_number)),
eval(try_eat(Philosopher_number,Number_of_philosophers,
Number_of_eats),philosophers),
Next_philosopher_number is Philosopher_number - 1,
set_table_and_philosophers(Next_philosopher_number,
Number_of_philosophers,Number_of_eats).
%---------------------------------------------------------------------
try_eat(Philosopher_number,_,0):-
send_request(write('Philosopher completed :')),
send_request(writeln(Philosopher_number)).
try_eat(Philosopher_number,Number_of_philosophers,Number_of_eats):-
in(ticket),
in(chopstick(Philosopher_number)),
Next_chopstick_number is (Philosopher_number + 1) mod
Number_of_philosophers,
in(chopstick(Next_chopstick_number)),
write('Philosopher '),
write(Philosopher_number),
writeln(' is eating'),
out(chopstick(Philosopher_number)),
out(chopstick(Next_chopstick_number)),
out(ticket),
write('Philosopher '),
write(Philosopher_number),
writeln(' is thinking'),
New_number_of_eats is Number_of_eats - 1,
try_eat(Philosopher_number,Number_of_philosophers,
New_number_of_eats).
%---------------------------------------------------------------------